package com.jinbao.springbootinit.xfxh;

import io.github.briqt.spark4j.SparkClient;
import io.github.briqt.spark4j.constant.SparkApiVersion;
import io.github.briqt.spark4j.exception.SparkException;
import io.github.briqt.spark4j.model.SparkMessage;
import io.github.briqt.spark4j.model.SparkSyncChatResponse;
import io.github.briqt.spark4j.model.request.SparkRequest;
import io.github.briqt.spark4j.model.response.SparkTextUsage;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * XF，别人开发的Sdk
 */
@Service
public class XfManager {


    public static final String appid = "8d2ab162";
    public static final String apiSecret = "MWJiODE0ODMwMGY0MjA5MzgwOTlhYzlh";
    public static final String apiKey = "847341a92ccdd796bf460c6df345a0ab";

    public static String totalAnswer = ""; // 大模型的答案汇总

    public String doChat(String question) throws Exception {
        SparkClient sparkClient = new SparkClient();

        // 设置认证信息
        sparkClient.appid = appid;
        sparkClient.apiKey = apiKey;
        sparkClient.apiSecret = apiSecret;

        // 消息列表，可以在此列表添加历史对话记录
        List<SparkMessage> messages = new ArrayList<>();
        messages.add(SparkMessage.systemContent("分析目标\n"+"{csv格式的原始数据，用,作为分隔符}\n" +
                "请根据这两部分内容，按照以下指定格式生成内容，内容包含“#####”（此外不要输出任何多余的开头、结尾、注释）\n" +
                "#####\n" +
                "{前端Echarts V5的option配置对象的准确json代码，合理地将数据进行可视化，不要生成任何多余的内容，比如注释}\n" +
                "#####\n" +
                "{明确的数据分析结论、越详细越好，不要生成多余的注释和解释，不要出现(通过Echarts)之类的解释}"));
        messages.add(SparkMessage.userContent(question));
// 构造请求
        SparkRequest sparkRequest = SparkRequest.builder()
// 消息列表
                .messages(messages)
// 模型回答的tokens的最大长度,非必传，默认为2048。
// V1.5取值为[1,4096]
// V2.0取值为[1,8192]
// V3.0取值为[1,8192]
                .maxTokens(2048)
// 核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高 非必传,取值为[0,1],默认为0.5
                .temperature(0.2)
// 指定请求版本，默认使用最新3.0版本
                .apiVersion(SparkApiVersion.V3_5)
                .build();


        try {
            // 同步调用
            SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
            SparkTextUsage textUsage = chatResponse.getTextUsage();
            totalAnswer = chatResponse.getContent();
//            System.out.println("\n回答：" + chatResponse.getContent());
            System.out.println("\n提问tokens：" + textUsage.getPromptTokens()
                    + "，回答tokens：" + textUsage.getCompletionTokens()
                    + "，总消耗tokens：" + textUsage.getTotalTokens());
        } catch (Exception e) {
            System.out.println("发生异常了：" + e.getMessage());
        }


        return totalAnswer;


    }


}
